package com.memento.demo1.main;

import com.memento.demo1.Caretaker;
import com.memento.demo1.Originator;

/**
 * 备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式，是对象的行为模式。
 * 
 * 备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下，将一个对象的状态捕捉(Capture)住，并外部化，
 * 存储起来，从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。
 * 
 * 
 * “白箱”备忘录模式的实现
 * 
 * 备忘录角色对任何对象都提供一个接口，即宽接口，备忘录角色的内部所存储的状态就对所有对象公开。因此这个实现又叫做“白箱实现”。
 * 
 * “白箱”实现将发起人角色的状态存储在一个大家都看得到的地方，因此是破坏封装性的。但是通过程序员自律，同样可以在一定程度上实现模式的大部分用意。
 * 因此白箱实现仍然是有意义的。
 * 
 * @author dell
 * 
 */
public class Client {

	public static void main(String[] args) {

		Originator o = new Originator();
		Caretaker c = new Caretaker();
		// 改变负责人对象的状态
		o.setState("On");
		// 创建备忘录对象，并将发起人对象的状态储存起来
		c.saveMemento(o.createMemento());
		// 修改发起人的状态
		o.setState("Off");
		// 恢复发起人对象的状态
		o.restoreMemento(c.retrieveMemento());

		System.out.println(o.getState());
	}

}
